lorom ; Using Low Rom, split ROM into 32k chunks org $008000 ; START HERE fillbyte $00 : fill 256000 ; Fill 256,000 bytes to the rom (for copiers) incsrc heather.asm ; Include IVT - heather org $008000 cleartable ; Clear the ASCII table built in the assembler table my_standard.tbl,ltr ; Load my own table.(make your own table) ;----------------------------DEMO-START--------------------------------------- start: sei ; Disable interrupts clc ; Clear carry xce ; Switch to NATIVE mode phk ; Push program bank on stack plb ; Pull STACK ON DATA BANK rep #$30 ; Reset Processor status bits lda #$0000 ; Make DP = $0000 tcd ; INITIATE ; sep #$20 ; X,Y 16,A are 8 bit numbers lda #$80 ; screen off sta $2100 ; brightness + screen enable register stz $2101 ; Sprite register (size + address in VRAM) stz $2102 ; Sprite registers (address of sprite memory [OAM]) stz $2103 ; "" "" stz $2105 ; Mode 0, = Graphic mode register stz $2106 ; noplanes, no mosaic, = Mosaic register stz $2107 ; Plane 0 map VRAM location stz $2108 ; Plane 1 map VRAM location stz $2109 ; Plane 2 map VRAM location stz $210A ; Plane 3 map VRAM location stz $210B ; Plane 0+1 Tile data location stz $210C ; Plane 2+3 Tile data location stz $210D ; Plane 0 scroll x (first 8 bits) stz $210D ; Plane 0 scroll x (last 3 bits) #$0 - #$07ff stz $210E ; Plane 0 scroll y (first 8 bits) stz $210E ; Plane 0 scroll y (last 3 bits) #$0 - #$07ff stz $210F ; Plane 1 scroll x (first 8 bits) stz $210F ; Plane 1 scroll x (last 3 bits) #$0 - #$07ff stz $2110 ; Plane 1 scroll y (first 8 bits) stz $2110 ; Plane 1 scroll y (last 3 bits) #$0 - #$07ff stz $2111 ; Plane 2 scroll x (first 8 bits) stz $2111 ; Plane 2 scroll x (last 3 bits) #$0 - #$07ff stz $2112 ; Plane 2 scroll y (first 8 bits) stz $2112 ; Plane 2 scroll y (last 3 bits) #$0 - #$07ff stz $2113 ; Plane 3 scroll x (first 8 bits) stz $2113 ; Plane 3 scroll x (last 3 bits) #$0 - #$07ff stz $2114 ; Plane 3 scroll y (first 8 bits) stz $2114 ; Plane 3 scroll y (last 3 bits) #$0 - #$07ff lda #$80 ; increase VRAM address after writing to $2119 sta $2115 ; VRAM address increment register stz $2116 ; VRAM address low stz $2117 ; VRAM address high stz $211A ; Initial Mode 7 setting register stz $211B ; Mode 7 matrix parameter A register (low) lda #$01 sta $211B ; Mode 7 matrix parameter A register (high) stz $211C ; Mode 7 matrix parameter B register (low) stz $211C ; Mode 7 matrix parameter B register (high) stz $211D ; Mode 7 matrix parameter C register (low) stz $211D ; Mode 7 matrix parameter C register (high) stz $211E ; Mode 7 matrix parameter D register (low) sta $211E ; Mode 7 matrix parameter D register (high) stz $211F ; Mode 7 center position X register (low) stz $211F ; Mode 7 center position X register (high) stz $2120 ; Mode 7 center position Y register (low) stz $2120 ; Mode 7 center position Y register (high) stz $2121 ; Color number register ($0-ff) stz $2123 ; BG1 & BG2 Window mask setting register stz $2124 ; BG3 & BG4 Window mask setting register stz $2125 ; OBJ & Color Window mask setting register stz $2126 ; Window 1 left position register stz $2127 ; Window 2 left position register stz $2128 ; Window 3 left position register stz $2129 ; Window 4 left position register stz $212A ; BG1, BG2, BG3, BG4 Window Logic register stz $212B ; OBJ, Color Window Logic Register (or,and,xor,xnor) sta $212C ; Main Screen designation (planes, sprites enable) stz $212D ; Sub Screen designation stz $212E ; Window mask for Main Screen stz $212F ; Window mask for Sub Screen lda #$30 sta $2130 ; Color addition & screen addition init setting stz $2131 ; Add/Sub sub designation for screen, sprite, color lda #$E0 sta $2132 ; color data for addition/subtraction stz $2133 ; Screen setting (interlace x,y/enable SFX data) stz $4200 ; Enable V-blank, interrupt, Joypad register lda #$FF sta $4201 ; Programmable I/O port stz $4202 ; Multiplicand A stz $4203 ; Multiplier B stz $4204 ; Multiplier C stz $4205 ; Multiplicand C stz $4206 ; Divisor B stz $4207 ; Horizontal Count Timer stz $4208 ; Horizontal Count Timer MSB (most significant bit) stz $4209 ; Vertical Count Timer stz $420A ; Vertical Count Timer MSB stz $420B ; General DMA enable (bits 0-7) stz $420C ; Horizontal DMA (HDMA) enable (bits 0-7) stz $420D ; Access cycle designation (slow/fast rom) start2: sep #$20 ; A = 8, XY =16 lda #$80 sta $2100 lda #$00 sta $2105 ; Mode 0 - 2 bitplanes lda #$01 sta $210b ; Char mem = $1000 lda #$20 sta $2107 ; Tilemem = $2000 lda #$80 sta $2115 ; Auto Increment On ; PALETTE ;---------------------------- ; Since I'm using my own font, and no ; Graphic conversion tools, I'll load ; My own palette manually. 2 bits per ; pixel gives me a total of 4 colors ;-------------------------------------- ; Color 0 = Background ;-------------------------------------- lda #$00 sta $2121 ; Color 0 lda #$ff sta $2122 lda #$7f sta $2122 ; White lda #$00 sta $2122 sta $2122 ; Color 1 = black lda #$10 sta $2122 lda #$07 sta $2122 ; Color 2 = green lda #$0f sta $2122 lda #$01 sta $2122 ; Color 3 = red ;--------------------------------------- ; This Moves the data into CHAR MEMORY in ; VRAM. ldx #$1000 stx $2116 ldx #$0000 - lda charset, x sta $2118 lda charset2, x sta $2119 inx cpx #$0800 bne - rep #$30 ; 16bit ; "Clears" VRAM with the ; "white space" character ldx #$2000 ; Loads TILEMAP Address stx $2116 ; Ready to be written to VRAM ldx #$0000 lda #$0020 ; $20 is the "white space" character - sta $2118 ; Store the character in VRAM inx cpx #$0800 bne - ;text rep #$30 ; Reset processor bits sep #$20 ; A = 8, XY = 16 lda #$00 sta $2115 ; Auto increment off ldx #$2000 ; Load TILEMAP Address stx $2116 ; Ready to be written to VRAM... Again ;) ldx #$0000 - lda text, x sta $2118 ; Load one byte of data to VRAM at a time stz $2119 inx cpx #$0400 bne - ;Turns the Screen on rep #$30 ; Reset processor bits sep #$20 ; A = 8, XY = 16 lda #$01 sta $212b ; Enable BG 1 lda #$0f sta $2100 ; No force blank, fullbrightness stop: ; Loop forever, the program never stops bra stop text: ; 32x32 - 8x8 tile screen ;"01234567890123456789012345678901" ;1 db " " ;2 db " HELLO WORLD - MAY 15, 2006 " ;3 db "--------------------------------" ;4 db " BY SPARDA " ;5 db " HEY WHATS UP NIGHTCRAWLER " ;6 db " HOW ARE YOU? CAN YOU BELIEVE " ;7 db " IT? I'VE DONE IT! IN LESS THAN " ;8 db " 3 MONTHS YES! " ;9 db "--------------------------------" ;0 db " THANKS GOES OUT TO: " ;1 db " BYUU - XKAS ALL THE WAY! " ;2 db " VERY COOL ASSEMBLER! " ;3 db " " ;4 db " NIGHTCRAWLER " ;5 db " FOR BEING SUCH GREAT HELP " ;6 db " WELL...THE ONLY HELP REALLY " ;7 db " THANK YOU SO MUCH! " ;8 db " NEVISKI " ;9 db " FOR HAVING VERY GOOD " ;0 db " COMMENTED CODE, AND FOR HIS " ;1 db " PCX2SNES PROGRAM THANKS " ;2 db "--------------------------------" ;3 db " I'VE NEVER CODED IN ASSEMBLER " ;4 db " BEFORE...... ;) " ;5 db " " ;6 db " SO WHAT DO YOU THINK GUYS " ;7 db " THANKS AGAIN NIGHTCRAWLER!!! " ;8 db " THIS WAS SO FREAKING DIFFICULT!" ;9 ; Actual font data, ready to be written to VRAM charset: db $00,$00,$00,$00,$00,$00,$00,$00 ;'@' db $00,$3c,$66,$7e,$66,$66,$66,$00 ;'A' db $00,$7c,$66,$7c,$66,$66,$7c,$00 ;'B' db $00,$3c,$66,$60,$60,$66,$3c,$00 ;'C' db $00,$78,$6c,$66,$66,$6c,$78,$00 ;'D' db $00,$7e,$60,$78,$60,$60,$7e,$00 ;'E' db $00,$7e,$60,$78,$60,$60,$60,$00 ;'F' db $00,$3c,$66,$60,$6e,$66,$3c,$00 ;'G' db $00,$66,$66,$7e,$66,$66,$66,$00 ;'H' db $00,$3c,$18,$18,$18,$18,$3c,$00 ;'I' db $00,$1e,$0c,$0c,$0c,$6c,$38,$00 ;'J' db $00,$6c,$78,$70,$78,$6c,$66,$00 ;'K' db $00,$60,$60,$60,$60,$60,$7e,$00 ;'L' db $00,$63,$77,$7f,$6b,$63,$63,$00 ;'M' db $00,$66,$76,$7e,$7e,$6e,$66,$00 ;'N' db $00,$3c,$66,$66,$66,$66,$3c,$00 ;'O' db $00,$7c,$66,$66,$7c,$60,$60,$00 ;'P' db $00,$3c,$66,$66,$66,$3c,$0e,$00 ;'Q' db $00,$7c,$66,$66,$7c,$6c,$66,$00 ;'R' db $00,$3e,$60,$3c,$06,$66,$3c,$00 ;'S' db $00,$7e,$18,$18,$18,$18,$18,$00 ;'T' db $00,$66,$66,$66,$66,$66,$3c,$00 ;'U' db $00,$66,$66,$66,$66,$3c,$18,$00 ;'V' db $00,$63,$63,$6b,$7f,$77,$63,$00 ;'W' db $00,$66,$3c,$18,$3c,$66,$66,$00 ;'X' db $00,$66,$66,$3c,$18,$18,$18,$00 ;'Y' db $00,$7e,$0c,$18,$30,$60,$7e,$00 ;'Z' db $08,$00,$00,$00,$00,$00,$00,$00 ;'[' db $00,$00,$00,$00,$00,$00,$00,$00 ;'\' db $00,$00,$00,$00,$00,$00,$00,$00 ;']' db $00,$00,$00,$00,$00,$00,$00,$00 ;'^' db $00,$08,$00,$00,$00,$00,$00,$00 ;'_' db $00,$00,$00,$00,$00,$00,$00,$00 ;' ' db $00,$7E,$7E,$3C,$18,$00,$18,$00 ;'!' db $00,$00,$00,$00,$00,$00,$00,$00 ;'"' db $80,$80,$80,$80,$80,$80,$80,$80 ;'#' db $FC,$FE,$FF,$F7,$F7,$FF,$FE,$FC ;'$' db $3E,$42,$4E,$5C,$5C,$4E,$42,$3E ;'%' db $00,$00,$00,$00,$00,$00,$00,$01 ;'&' db $00,$00,$00,$07,$00,$00,$00,$00 ;''' db $00,$04,$08,$08,$08,$08,$04,$00 ;'(' db $00,$20,$10,$10,$10,$10,$20,$00 ;')' db $08,$08,$08,$F8,$08,$08,$08,$08 ;'*' db $10,$10,$10,$1F,$10,$10,$10,$10 ;'+' db $10,$10,$20,$C0,$00,$00,$00,$00 ;',' db $00,$00,$00,$FF,$00,$00,$00,$00 ;'-' db $00,$00,$00,$00,$00,$18,$18,$00 ;'.' db $00,$00,$00,$FF,$80,$80,$80,$80 ;'/' db $00,$3c,$66,$6e,$76,$66,$3c,$00 ;'0' db $00,$18,$38,$18,$18,$18,$7e,$00 ;'1' db $00,$7c,$06,$0c,$30,$60,$7e,$00 ;'2' db $00,$7e,$06,$1c,$06,$66,$3c,$00 ;'3' db $00,$0e,$1e,$36,$7f,$06,$06,$00 ;'4' db $00,$7e,$60,$7c,$06,$66,$3c,$00 ;'5' db $00,$3e,$60,$7c,$66,$66,$3c,$00 ;'6' db $00,$7e,$06,$0c,$0c,$0c,$0c,$00 ;'7' db $00,$3c,$66,$3c,$66,$66,$3c,$00 ;'8' db $00,$3c,$66,$3e,$06,$66,$3c,$00 ;'9' db $00,$00,$00,$03,$04,$08,$08,$08 ;':' db $00,$80,$80,$F0,$80,$80,$00,$00 ;';' db $80,$80,$80,$FF,$00,$00,$00,$00 ;'<' db $00,$00,$00,$C0,$20,$10,$10,$10 ;'=' db $08,$08,$04,$03,$00,$00,$00,$00 ;'>' db $00,$00,$00,$00,$00,$00,$00,$00 ;'?' charset2: db $00,$3C,$4E,$5E,$5E,$40,$3C,$00 ;'@' db $00,$3c,$66,$7e,$66,$66,$66,$00 ;'A' db $00,$7c,$66,$7c,$66,$66,$7c,$00 ;'B' db $00,$3c,$66,$60,$60,$66,$3c,$00 ;'C' db $00,$78,$6c,$66,$66,$6c,$78,$00 ;'D' db $00,$7e,$60,$78,$60,$60,$7e,$00 ;'E' db $00,$7e,$60,$78,$60,$60,$60,$00 ;'F' db $00,$3c,$66,$60,$6e,$66,$3c,$00 ;'G' db $00,$66,$66,$7e,$66,$66,$66,$00 ;'H' db $00,$3c,$18,$18,$18,$18,$3c,$00 ;'I' db $00,$1e,$0c,$0c,$0c,$6c,$38,$00 ;'J' db $00,$6c,$78,$70,$78,$6c,$66,$00 ;'K' db $00,$60,$60,$60,$60,$60,$7e,$00 ;'L' db $00,$63,$77,$7f,$6b,$63,$63,$00 ;'M' db $00,$66,$76,$7e,$7e,$6e,$66,$00 ;'N' db $00,$3c,$66,$66,$66,$66,$3c,$00 ;'O' db $00,$7c,$66,$66,$7c,$60,$60,$00 ;'P' db $00,$3c,$66,$66,$66,$3c,$0e,$00 ;'Q' db $00,$7c,$66,$66,$7c,$6c,$66,$00 ;'R' db $00,$3e,$60,$3c,$06,$66,$3c,$00 ;'S' db $00,$7e,$18,$18,$18,$18,$18,$00 ;'T' db $00,$66,$66,$66,$66,$66,$3c,$00 ;'U' db $00,$66,$66,$66,$66,$3c,$18,$00 ;'V' db $00,$63,$63,$6b,$7f,$77,$63,$00 ;'W' db $00,$66,$3c,$18,$3c,$66,$66,$00 ;'X' db $00,$66,$66,$3c,$18,$18,$18,$00 ;'Y' db $00,$7e,$0c,$18,$30,$60,$7e,$00 ;'Z' db $00,$00,$00,$00,$00,$00,$00,$00 ;'[' db $09,$09,$00,$00,$00,$00,$00,$00 ;'\' db $00,$00,$00,$00,$00,$00,$00,$00 ;']' db $00,$00,$00,$00,$00,$00,$00,$00 ;'^' db $00,$08,$00,$00,$00,$00,$00,$00 ;'_' db $00,$00,$00,$00,$00,$00,$00,$00 ;' ' db $00,$7E,$7E,$3C,$18,$00,$18,$00 ;'!' db $00,$00,$00,$00,$00,$00,$00,$00 ;'"' db $80,$80,$80,$80,$80,$80,$80,$80 ;'#' db $FC,$FE,$FF,$F7,$F7,$FF,$FE,$FC ;'$' db $3E,$42,$4E,$5C,$5C,$4E,$42,$3E ;'%' db $00,$00,$00,$00,$00,$00,$00,$01 ;'&' db $00,$00,$00,$07,$00,$00,$00,$00 ;''' db $00,$04,$08,$08,$08,$08,$04,$00 ;'(' db $00,$20,$10,$10,$10,$10,$20,$00 ;')' db $08,$08,$08,$F8,$08,$08,$08,$08 ;'*' db $10,$10,$10,$1F,$10,$10,$10,$10 ;'+' db $10,$10,$20,$C0,$00,$00,$00,$00 ;',' db $00,$00,$00,$FF,$00,$00,$00,$00 ;'-' db $00,$00,$00,$00,$00,$18,$18,$00 ;'.' db $00,$00,$00,$FF,$80,$80,$80,$80 ;'/' db $00,$3c,$66,$6e,$76,$66,$3c,$00 ;'0' db $00,$18,$38,$18,$18,$18,$7e,$00 ;'1' db $00,$7c,$06,$0c,$30,$60,$7e,$00 ;'2' db $00,$7e,$06,$1c,$06,$66,$3c,$00 ;'3' db $00,$0e,$1e,$36,$7f,$06,$06,$00 ;'4' db $00,$7e,$60,$7c,$06,$66,$3c,$00 ;'5' db $00,$3e,$60,$7c,$66,$66,$3c,$00 ;'6' db $00,$7e,$06,$0c,$0c,$0c,$0c,$00 ;'7' db $00,$3c,$66,$3c,$66,$66,$3c,$00 ;'8' db $00,$3c,$66,$3e,$06,$66,$3c,$00 ;'9' db $00,$00,$00,$03,$04,$08,$08,$08 ;':' db $00,$80,$80,$F0,$80,$80,$00,$00 ;';' db $80,$80,$80,$FF,$00,$00,$00,$00 ;'<' db $00,$00,$00,$C0,$20,$10,$10,$10 ;'=' db $08,$08,$04,$03,$00,$00,$00,$00 ;'>' db $00,$00,$00,$00,$00,$00,$00,$00 ;'?'